package com.sugon.service;

import com.sugon.entity.SysConfigEntity;

import java.util.List;
import java.util.Map;

/**
 * 系统配置信息
 *
 * @author lipengjun
 * @date 2017年11月18日 下午13:13:23
 */
public interface SysConfigService {

    /**
     * 保存配置信息
     */
    void save(SysConfigEntity config);

    /**
     * 更新配置信息
     */
    void update(SysConfigEntity config);

    /**
     * 根据key，更新value
     */
    void updateValueByKey(String key, String value);

    /**
     * 删除配置信息
     */
    void deleteBatch(String[] ids);

    /**
     * 获取List列表
     */
    List<SysConfigEntity> queryList(Map<String, Object> map);

    /**
     * 获取总记录数
     */
    int queryTotal(Map<String, Object> map);

    SysConfigEntity queryObject(String id);

    /**
     * 根据key，获取配置的value值
     *
     * @param key          key
     * @param defaultValue 缺省值
     */
    String getValue(String key, String defaultValue);

    /**
     * 根据key，获取value的Object对象
     *
     * @param key   key
     * @param clazz Object对象
     */
    <T> T getConfigObject(String key, Class<T> clazz);

    /**
     * 获取登陆尝试的最大次数，超过该次数后会一小时内禁止登陆
     *
     * @return
     */
    int getMaxLoginAttemptTime();

    /**
     * 获取预测性数据路径
     *
     * @return
     */
    String getForecaseDataPath();

    /**
     * 获取文件服务器路径
     *
     * @return
     */
    String getFileServerPath();

    /**
     * 获取ERP备件库存最近一次同步时间
     *
     * @return
     */
    String getErpSynTime();

    /**
     * 获取文件服务器路径
     *
     * @return
     */
    String getLocalSavePath();

    /**
     * 获取本机域名
     *
     * @return
     */
    String getHost();

    /**
     * 获取是否认证
     *
     * @return
     */
    String getIsAuth();

    /**
     * 获取POI Excel模板文件路径
     *
     * @return
     */
    String getPoiTemplatePath();

    /**
     * 获取临时文件存储路径，一般用于文件上传到文件服务器前
     * 在正式服务器对文件进行临时性存储
     *
     * @return
     */
    String getTemSavePath();

    /**
     * 获取江北发动机工具备件领用流程APPID
     *
     * @return
     */
    String getBpmAppId();


    /**
     * 获取ERMS在长安统一认证中心获取的那个APPID
     *
     * @return
     */
    String getErmsAppId();

    /**
     * 获取远程服务域名
     *
     * @return
     */
    String getRemoteServiceHost();

    /**
     * 获取车间触发时长
     *
     * @return
     */
    Integer getWorkshopTriggerTime();

    /**
     * 获取产线触发时长
     *
     * @return
     */
    Integer getFactoryTriggerTime();

    /**
     * 获取重新计算KPI年份
     * 比如2，那么表示重新计算近2年不同维度下的KPI
     * 默认值为1
     *
     * @return
     */
    Integer getRecomputeKpiYears();


    /**
     * 是否显示真安全库存
     * 1:显示真安全库存
     * 0: 显示库存数
     *
     * @return
     */
    Integer getIsRealSafetyStock();

    /**
     * 获取系统消息有效期
     * 如果该参数未配置，默认值为14天
     *
     * @return
     */
    Integer getSysMsgValidDuration();

    /**
     * 获取指定产线/设备的计划节拍时间
     *
     * @param lineCode
     * @return
     */
    Double getPlanBeatTime(String lineCode);

    /**
     * 根据模具编码获取模具节拍时长
     *
     * @param moldCode 模具编码
     * @return
     */
    Double getMoldBeatTime(String moldCode);

    /**
     * 获取特种设备校验提前提醒参数
     *
     * @return
     */
    Integer getSpecDevCheckAheadNoticeDays();

    /**
     * 获取可修改维修时间的车间编码列表
     *
     * @return
     */
    List<String> getModifiableRepairTimeWorkshopCodeList();

    /**
     * 获取minio配置
     *
     * @return
     */
    String getMinioConfig();

    /**
     * 获取代理地址
     *
     * @return
     */
    String getProxyUrl();

}
